package com.sky.course.cfgbeans;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Description:    服务提供者的配置及负载均衡
* @Author:         Joe
* @CreateDate:     2019/10/25 15:44
*/
@Configuration
public class ConfigBean {
    /**
     * 是Spring用于同步client端的核心类，简化了与http服务的通信，并满足RestFul原则，程序代码可以给它提供URL，并提取结果。
     * 默认情况下，RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源，比如Apache HttpComponents、Netty和OkHttp。
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

    /**
     * 使用Ribbon的自带的策略进行负载均衡的轮询
     * @return
     */
    @Bean
    public IRule myRule(){
        //return new RoundRobinRule(); //正常轮询
        return new RandomRule();//随机轮询
        //return new RetryRule();//重试(当有一个服务出问题多次访问失败之后就会放弃该服务)
    }
}
